// ===========   File : ListStack.h =============//

#ifndef __LISTSTACK_H__
#define __LISTSTACK_H__


/*****************************************************************************
 *                         参数定义
****************************************************************************/


/* 单向链表节点结构体 */
typedef struct ListNode{
    int val;                    //节点值
    struct ListNode *next;      //指向下一个节点的指针
}ListNode;


/* 基于链表实现的栈 */
typedef struct{
    ListNode *top;          /* 将头节点作为栈顶*/
    int size;               /* 栈的长度 */
}LinkedListStack;


/*****************************************************************************
 *                         PUBLIC FUNCTION
****************************************************************************/

/* Create a stack */
LinkedListStack * NewLinkedListStack();

/* Delete a stack */
void DelLinkedListStack(LinkedListStack *s);

/* Get the width of the stack */
int StackSize(LinkedListStack *s);

/* Determine whether the stack is empty */
_Bool StackIsEmpty(LinkedListStack *s);

/* Access elements at the top of the stack */
int StackPeek(LinkedListStack *s);

/* Enter the stack */
void StackPush(LinkedListStack *s,int num);

/* Out of the stack */
int StackPop(LinkedListStack *s);

/* Print the value at the top of the stack */
void StackPrintf(LinkedListStack *s);
#endif
